package com.smart.tool.scheduler;

import java.util.concurrent.TimeUnit;

/**
 * @Author xiaoqiang
 * @Version SmartScheduler.java, v 0.1 2025年08月13日 20:00 xiaoqiang
 * @Description: TODO
 */
public interface SmartScheduler {


    /**
     * 添加任务，异步
     * @param taskConfig
     * @return
     */
   <T> String schedule(TaskConfig<T> taskConfig);


    /**
     * 添加任务，同步
     * @param taskConfig
     * @return
     */
    /*<T> T scheduleSync(TaskConfig<T> taskConfig, long timeout, TimeUnit timeUnit);*/



    /**
     *  取消任务
     * 如果任务正在执行，并等待任务执行完成，后续任务将不会执行
     *
     * @param taskId
     * @return
     */
    boolean cancel(String taskId);



    /**
     * 恢复任务
     *
     * @param taskId
     * @return
     */
    //boolean resume(String taskId);

    /**
     * 获取任务状态
     *
     * @param taskId
     * @return
     */
    TaskStatus getTaskStatus(String taskId);


    /**
     * 获取当前待执行的任务个数，
     */
    long getPendingTaskCount();
    /**
     * 获取任务执行次数
     *
     * @param taskId
     * @return
     */
    int getTaskExecutionCount(String taskId);

    /**
     * 关闭调度器
     */
    void shutdown();

}
